import Vue from 'vue'

Vue.filter('filterTime', (time, formater, ...args) => {
  if (!time) return time

  // let time = timeStamp.toString().replace("/Date(", "").replace(")/", "")
  const date = new Date(time.replace(/-/g, '/')) // parseInt(time)

  let fmt = (formater != null) ? formater : 'yyyy-MM-dd hh:mm:ss'
  const o = {
    'M+': date.getMonth() + 1, // 月
    'd+': date.getDate(), // 日
    'h+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    'S': date.getMilliseconds() // 毫秒
  }

  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  for (const k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) { fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) }
  }

  return fmt
})

Vue.filter('timestampToTime', (timestamp, ...args) => {
  var date = new Date(timestamp)// 时间戳为10位需*1000，时间戳为13位的话不需乘1000
  var Y = date.getFullYear() + '-'
  var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
  var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' '
  var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'
  var m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes())
  // var s = date.getSeconds()
  return Y + M + D + h + m
})

// Vue.filter('intervalTime', (time, ...args) => {
//   var stime = Date.parse(new Date(time))
//   var etime = (new Date()).valueOf()
//   var usedTime = etime - stime // 两个时间戳相差的毫秒数
//   // var days = Math.floor(usedTime / (24 * 3600 * 1000))
//   // 计算出小时数
//   var leave1 = usedTime % (24 * 3600 * 1000) // 计算天数后剩余的毫秒数
//   var hours = Math.floor(leave1 / (3600 * 1000))
//   // 计算相差分钟数
//   var leave2 = leave1 % (3600 * 1000) // 计算小时数后剩余的毫秒数
//   var minutes = Math.floor(leave2 / (60 * 1000))
//   return (hours > 0 ? hours + 'hour' : minutes + 'minute') + ' ago'
// })

Vue.filter('filterNumber', (num, formater, type, ...args) => {
  const arr_txt = ['千', '万', '百万', '千万', '亿万']
  const arr_word = ['K', 'w', 'm', 'kw', '亿万']
  // type = type || 'word'
  const arr = type === 'word' || !type ? arr_word : arr_txt
  let newnum = Number(num) // parseInt parseFloat
  if (newnum < 1000) {
    return newnum
  }
  if (newnum >= 1000 && newnum < 10000) {
    newnum = parseFloat((newnum / 1000).toFixed(2)) + arr[0]
  } else if (newnum >= 10000) {
    newnum = parseFloat((newnum / 10000).toFixed(2)) + arr[1]
  }
  return newnum
})

// 过滤没有 http 的图片地址
Vue.filter('filterImgUrlH', (url, formater, ...args) => {
  const reg = /(http|https):\/\/([\w.]+\/?)\S*/
  reg.test(url) || (url = 'http://' + url)
  return url
})

Vue.filter('intervalTime', (time, ...args) => {
  var timer = Date.parse(new Date(time))
  var arrTimestamp = (timer + '').split('')
  for (var start = 0; start < 13; start++) {
    if (!arrTimestamp[start]) {
      arrTimestamp[start] = '0'
    }
  }
  timer = arrTimestamp.join('') * 1

  var minute = 1000 * 60
  var hour = minute * 60
  var day = hour * 24
  var halfamonth = day * 15
  var month = day * 30
  var now = new Date().getTime()
  var diffValue = now - timer

  // 如果本地时间反而小于变量时间
  // if (diffValue < 0) {
  //   return '不久前'
  // }

  // 计算差异时间的量级
  var monthC = diffValue / month
  var weekC = diffValue / (7 * day)
  var dayC = diffValue / day
  var hourC = diffValue / hour
  var minC = diffValue / minute

  // 数值补0方法
  var zero = function(value) {
    if (value < 10) {
      return '0' + value
    }
    return value
  }

  // 使用
  if (monthC > 12) {
    // 超过1年，直接显示年月日
    return (function() {
      var date = new Date(timer)
      return date.getFullYear() + '-' + zero(date.getMonth() + 1) + '-' + zero(date.getDate())
    })()
  } else if (monthC >= 1) {
    return parseInt(monthC) + 'month ago'
  } else if (weekC >= 1) {
    return parseInt(weekC) + 'week ago'
  } else if (dayC >= 1) {
    return parseInt(dayC) + 'day ago'
  } else if (hourC >= 1) {
    return parseInt(hourC) + 'hour ago'
  } else if (minC >= 1) {
    return parseInt(minC) + 'minute ago'
  }
  return 'a short time ago'
})

Vue.filter('rfc3399ToTime', (time, ...args) => {
  return time.replace('T', ' ').replace('Z', '')
})
